MATLAB中的高性能计算方案 您所在的位置:网站首页 matlab 可执行文件太大 MATLAB中的高性能计算方案

MATLAB中的高性能计算方案

2023-07-16 07:05| 来源: 网络整理| 查看: 265

使用MATLAB对科学计算加速

本文参考MATLAB中文论坛《MATLAB小迈步》系列,并贴上视频地址(出自b站认证账号:MATLAB中国):https://www.bilibili.com/video/BV14q4y1J7ti

5个实用技巧

在这里插入图片描述 本次小迈步课程主要讲述5个用于MATLAB科学计算加速的技巧:

其中1,2点从MATLAB编程角度出发提出优化方案,更好的编程习惯可以大大提高计算的速度、将MATLAB代码转换为C代码,或生成可执行文件,来缓解MATLAB本身在一些情况下可能没有C语言快的问题3,4点则是在不需要熟悉MPI与CUDA编程的前提下,一键开启多核并行计算、GPU加速计算。还可以将计算任务发布到集群上,实现零编程成本的众核计算第5点则是MATLAB的大数据计算方案,同样是不需要熟悉大数据计算的原理,仅需要一些标志性关键字,即可自动分批处理无法一次性加载到内存的大规模数据,处理过程对编程人员透明 1.MATLAB代码优化 1.1使用更新版的MATLAB

在安装这种大型软件平台的时候,总有一种感觉,装个相对旧点的版本吧,新的可能太大了或者自己的机器带不动。事实上这些问题,平台开发方可能也会考虑。MATLAB就是如此,不断重新设计执行引擎,提升代码执行的速度(python也在做这方面的努力)。除此之外,MATLAB在其官网推出了具有适用于不同侧重方向的部分版试用安装包。体积要比完全版小很多。 在这里插入图片描述 下载试用MATLAB:https://ww2.mathworks.cn/ 在这里插入图片描述

1.2预分配内存

在写MATLAB代码时,很多时候习惯不给变量预分配内存。事实上预分配内存对代码速度的影响可能超越我们的想象。 在这里插入图片描述

1.3向量、矩阵操作

MATLAB一直以来主打的优势就是他的向量、矩阵运算,扔掉一层层的for循环,优雅且高效 在这里插入图片描述 在这里插入图片描述 在这里插入图片描述

2.MATLAB转换为C代码

MATLAB集成的MATLAB coder应用,可以将MATLAB代码直接转换为C代码、exe可执行文件、lib&dll和MEX(MATLAB可执行文件)。MATLAB coder在MATLAB图形化界面APP选项卡中。 在这里插入图片描述 在这里插入图片描述 并不是所有情况下,将MATLAB代码转换为C语言或可执行文件都会提升执行速度。当代码中有大量向量化操作时,C-MEX的速度可能并没有MATLAB的速度快。 在这里插入图片描述 在这里插入图片描述

3.MATLAB并行计算

MATLAB图形化界面可以一键开启并行池,还可以选择使用本机的多CPU计算,也可以切换到大规模集群中的众核计算。 在这里插入图片描述 通常只需添加几个字符,串行程序即可转化为并行程序(前提程序可并行化)。 在这里插入图片描述

4.MATLAB代码使用GPU加速

使用GPU加速的过程:将数据传输到GPU -> 在GPU上计算 -> 将数据传回CPU。 不需要有任何GPU编程基础,MATLAB中提供了两个函数:gpuArray和gather,gpuArray可以将数据传输到GPU,函数返回的变量在计算时自动调用GPU;gather函数接收GPU上的数据,复制到CPU上并返回。

总的来说,在需要GPU加速的代码前使用gpuArray将相关变量复制到GPU,在代码结束使用gather函数将最终结果传回CPU,几行代码即可实现GPU加速。 在这里插入图片描述 同样在APP选项卡中,找到GPU coder可以将MATLAB代码转化为CUDAC代码

在这里插入图片描述

5.MATLAB大数据计算

在这里插入图片描述 MATLAB在处理tall Data时使用tall arrays,会分块读取,这个过程对MATLAB使用者透明,即用户感觉它是一次性读取了所有数据到内存。同时支持本地多CPU并行读取,集群上多CPU读取。只需在tall arrays使用前打开并行池即可。 在这里插入图片描述 处理方法:

使用datastore读取数据tall函数将读取到的数据转换为tall array中间计算过程不需要任何修改在计算后使用gather函数获转换最终结果 需要注意的是,gather之前的计算过程会延迟,只有执行到gather时才真正开始分配内存计算。 在这里插入图片描述


【本文地址】

公司简介

联系我们

今日新闻

    推荐新闻

    专题文章
      CopyRight 2018-2019 实验室设备网 版权所有